<?php
// Проверка прав авторизованного пользователя клиентской части на раздел, у которого IS_PROTECTED=1
// Переменные $full_set,$version,$site_id,$lang_id используются для предвыборки всех разрешенных разделов
// для данного пользователя. Применяется модулем "меню" для увеличения скорости работы проверки прав
function check_rights_on_page($page_id,$full_set=0,$version=0,$site_id=0,$lang_id=0){
	if (check_mnogosearch()){
		return true;
	}

	global $protected_access;
	static $r_ap; // массив разрешенных разделов

	$q_template=array(
		"isRegistratedClient"=>"
			from
				PAGE
			where
				PAGE.IS_PROTECTED=1",
		"isRightClient"=>"
			from
				CLIENT C,
				CLIENT_PAGE CP,
				PAGE
			where
				C.CLIENT_ID = '{$_COOKIE['client_id']}' and
				C.RANDOM_NUMBER = '{$_COOKIE['random_number']}' and
				C.CLIENT_ID = CP.CLIENT_ID and
				CP.PAGE_ID = PAGE.PAGE_ID",
		"isRightGroup"=>"
			from
				CLIENT C,
				CGROUP_CLIENT CGC,
				CGROUP_PAGE CGP,
				PAGE
			where
				C.CLIENT_ID = '{$_COOKIE['client_id']}' and
				C.RANDOM_NUMBER = '{$_COOKIE['random_number']}' and
				C.CLIENT_ID = CGC.CLIENT_ID and
				CGC.CGROUP_ID = CGP.CGROUP_ID and
				CGP.PAGE_ID = PAGE.PAGE_ID"
		);

	if(!$protected_access){
		$allowed=1;
	}else{
		if($full_set && !is_array($r_ap)){
			$allowed_pages=sql_select("select PAGE.PAGE_ID {$q_template[$protected_access]} AND PAGE.SITE_ID={$site_id}	AND PAGE.VERSION={$version}	AND PAGE.LANG_ID={$lang_id}");
			foreach($allowed_pages as $ap){
				$r_ap[$ap["PAGE_ID"]]=$ap["PAGE_ID"];
			}
		}

		if(!$full_set){
			$allowed_pages=sql_select("select PAGE.PAGE_ID {$q_template[$protected_access]} AND PAGE.PAGE_ID={$page_id}");
			$r_ap[$allowed_pages[0]["PAGE_ID"]]=$allowed_pages[0]["PAGE_ID"];
		}

		if($r_ap[$page_id]){
			$allowed=1;
		}else{
			$allowed=0;
		}

		if(!$full_set){
			$r_ap="";
		}
	}
	return $allowed;
}

// Сборка оптимального идентификатора пользователя для системы кэширования модуля меню
// Решено свести все к " {$_COOKIE['client_id']} {$_COOKIE['random_number']}" и отказаться от этой функции
/*function get_id_for_cache(){
	global $protected_access;
	if($protected_access=="isRegistratedClient"){
		$id=check_autorization();
	}elseif($protected_access=="isRightClient" || $protected_access=="isRightGroup"){
		$id=" {$_COOKIE['client_id']} {$_COOKIE['random_number']}";
	}
	return $id;
}*/
// Проверка авторизации пользователя
function check_autorization(){
	if (check_mnogosearch()){
		return true;
	}
	global $common_data_server;
	include_once($common_data_server."modules/module/module.php");
	include_once($common_data_server."modules/client/client.php");
	$client=new client;
	return $client->isRegistratedClient();
}

// Не достаточно прав для просмотра запрашиваемого раздела
function permissionDenied(){
	global $page_id, $site_id, $lang_id;
	$permissionDeniedURL = sql_select("select * from SYSTEM_URL where LANG_ID = $lang_id AND SITE_ID = $site_id AND SYSTEM_URL_TYPE = 1");
	if ($permissionDeniedURL[0]['URL']){	    header("Location: {$permissionDeniedURL[0]['URL']}");
	}else{
		echo 'К сожалению, Вы не имеете достаточно прав к запрашиваемому разделу. Для получения дополнительной информации обратитесь к администрации сайта.';
		exit;
	}
}

function check_mnogosearch(){
	if ($_SERVER['HTTP_USER_AGENT']=='MNOGOSEARCH_INDEXER'){
		//наверное mnogosearch
		if (!isset($_SERVER['PHP_AUTH_USER'])){
			header('WWW-Authenticate: Basic realm="My Realm"');
			header('HTTP/1.0 401 Unauthorized');
			echo 'Текст, отправляемый в том случае, если пользователь нажал кнопку Cancel';
			exit;
		}else{
			if ($_SERVER['PHP_AUTH_USER']=='login1' && $_SERVER['PHP_AUTH_PW']=='passwd1'){
				return true;
			}else{
				header('WWW-Authenticate: Basic realm="My Realm"');
				header('HTTP/1.0 401 Unauthorized');
				exit;
			}
		}
	}else{
		return false;
	}
}
